package com.niiwoo.civet.user.service;

import com.alibaba.fastjson.JSONArray;
import com.niiwoo.civet.user.dto.request.FeedBackSaveRequestDTO;
import com.niiwoo.civet.user.dto.request.NiiwooScorePageRequestDTO;
import com.niiwoo.civet.user.dto.request.QueryUserBasicInfoRequestDTO;
import com.niiwoo.civet.user.dto.request.UserBasicInfoRequestDTO;
import com.niiwoo.civet.user.dto.response.*;
import com.niiwoo.civet.user.enums.UserIdentityEnum;
import com.niiwoo.tripod.provider.dto.response.PageResponseDTO;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * Created by huangmin on 2017/11/10.
 */

public interface UserBasicInfoDubboService {

    /**
     * 获取用户基本信息(用户不存在抛异常)
     * @param userId 用户ID
     * @return UserBasicInfoResponseDTO (手机号已解密)
     */
    UserBasicInfoResponseDTO getUserBasicInfo(String userId);

    /**
     * 获取用户基本信息(用户不存返回空)
     * @param userId 用户ID
     * @return UserBasicInfoResponseDTO (手机号已解密)
     */
    UserBasicInfoResponseDTO selectUserBaseInfo (String userId);

    /**
     * 获取用户基本信息,提供给资产端查询用户信息
     * @param userId
     * @return
     */
    UserBasicInfoResponseDTO getUserBasicInfoForAsset(String userId);

    /**
     * H5引流弹窗通知
     */
    void showWindowCallback(String userId);

    /**
     * 修改用户昵称
     * @param userBasicInfoRequestDTO 用户基础信息请求DTO
     * @return UserBasicInfoResponseDTO
     */
    void updateUserNickName(UserBasicInfoRequestDTO userBasicInfoRequestDTO, String nickName);

    /**
     * 修改用户昵称状态
     * @param userId 用户ID
     * @return UserNickNameStateResponseDTO
     */
    Date updateUserNickNameState(String userId);

    /**
     * 修改用户个性签名
     *
     * @param userBasicInfoRequestDTO 用户基础信息请求DTO
     * @return int
     */
    void updateUserPersonalSign(UserBasicInfoRequestDTO userBasicInfoRequestDTO);

    /**
     * 修改用户头像
     *
     * @param userBasicInfoRequestDTO 用户基础信息请求DTO
     * @return int
     */
    void updateHeadImage(UserBasicInfoRequestDTO userBasicInfoRequestDTO);

    /**
     * 查询用户当前你我分
     * @param userId 用户ID
     * @return NiiwooScoreResponseDTO
     */
    NiiwooScoreResponseDTO selectUserNiiwooScore(String userId);

    /**
     * 你我分更新记录查询
     * @param niiwooScorePageRequestDTO 你我分分页DTO
     * @return PageResponseDTO
     */
    PageResponseDTO selectNiwoScoreRecordListByPage(NiiwooScorePageRequestDTO niiwooScorePageRequestDTO);


    /**
     * 你我分批量保存（天称调用）
     * @param scoreArray 你我分数组
     */
    int insertBatchNiwoScore(JSONArray scoreArray);

    /**
     * 个人首页用户相关信息
     * @param userId 用户Id
     * @return MyPageUserInfoDTO
     */
    MyPageUserInfoDTO getMyPageUserInfo(String userId);

    /**
     * 获取用户基本信息列表
     * @param userIdSet 用户ID
     * @return list
     */
	List<UserBasicInfoDTO> queryListByUserIdSet(Set<String> userIdSet);

    /**
     * 根据userId、手机号,姓名查询用户认证信息
     * @param requestDTO 用户ID或者手机 和 查询类型
     * @return UserBasicInfoResponseDTO (手机号已解密)
     */
    QueryBasicInfoResponseDTO queryUserBasicInfo(QueryUserBasicInfoRequestDTO requestDTO);

    /**
     * 变更用户身份标示
     * @param userId
     * @param identityEnum
     */
    void changeUserIdentityTag(String userId, UserIdentityEnum identityEnum);

    /**
     * 根据身份证号查询用户id
     * @param mobileNo 手机号码
     * @return
     */
    String queryUserIdByMobileNo(String mobileNo);

    String queryUserIdByNickName(String nickName);

    /**
     * 查询用户合同相关信息
     * @param userId
     * @return
     */
    UserContractInfoDTO getUserContractInfo(String userId);

    /**
     * 保存用户意见反馈
     *
     * @param requestDTO 意见反馈信息
     */
    boolean feedBackSave(FeedBackSaveRequestDTO requestDTO);

    /**
     * 平台相信数据统计(注册人数，今日注册人数，借款人数)
     * @return PlatformStatisticsResponseDTO
     */
    PlatformStatisticsResponseDTO platformStatisticsInformation();

    /**
     * 根据用户身份证号查询用户认证信息
     * @param idCard 用户身份证号(不加密)
     * @return UserBasicInfoResponseDTO (手机号已解密)
     */
    default QueryBasicInfoResponseDTO queryUserBasicInfoByIdCard(String idCard){ return null; }

    /**
     * 查询合同签署所需的用户个人数据 (身份证已解密)
     * @param userId 用户ID
     * @return borrowerContractResponseDTO
     */
    default ContractUserInfoResponseDTO queryUserContractData(String userId){
        throw new UnsupportedOperationException("unimplemented");
    }

    /**
     * 获取邀请码
     * 
     * @param userId
     * @return
     */
    default GetInviteCodeResponseDTO getInviteCode(String userId){
        throw new UnsupportedOperationException("unimplemented");
    }

}
